package com.spic.result;

import lombok.Getter;


@Getter
public class Result<T> {

    private int code;

    private String message;

    private T data;

    private Result(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 构造代表操作成功的且不需要返回数据的Result对象
     * @return
     */
    public static Result success(){
        return success(null);
    }

    /**
     * 构造代表操作成功的且需要返回数据的Result对象
     * @return
     */
    public static <T> Result success(T data){
        return new Result(ResultCode.SUCCESS.getCode(),ResultCode.SUCCESS.getMessage(), data);
    }

    /**
     * 构造代表操作失败的不需要返回数据的Result对象
     * @return
     */
    public static Result error(){
        return error(ResultCode.ERROR);
    }

    /**
     * 构造代表操作失败的不需要返回数据的且需要自定义状态码的Result对象
     * @return
     */
    public static Result error(ResultCode resultCode){
        return error(resultCode, null);
    }

    /**
     * 构造代表操作失败的需要返回数据的Result对象
     * @return
     */
    public static <T> Result error(T data){
        return error(ResultCode.ERROR, data);
    }

    /**
     * 构造代表操作失败的需要返回数据的且需要自定义状态码的Result对象
     * @return
     */
    public static <T> Result error(ResultCode resultCode, T data){
        return new Result(resultCode.getCode(), resultCode.getMessage(), data);
    }


}
